package com.jiashihui.schema_lgorithm.schema.factory;

/**
 * @author jiashihui
 * @describe: 工厂模式
 * @date 2019/02/25
 * 工厂方法模式分为三种：普通工厂模式、多工厂模式、静态工厂模式
 */
public class FactoryTest {
    // 普通工厂模式
//    public static void main(String[] args) {
//        SendFactory factory = new SendFactory();
//        Sender sender = factory.produce("mail");
//        sender.send();
//    }

    // 多个工厂方法模式
    // 多个工厂方法模式是提供多个工厂方法，分别创建对象
//    public static void main(String[] args) {
//        SendFactory factory = new SendFactory();
//        factory.produceMail().send();
//    }

    // 大多数情况下，我们会选用第三种——静态工厂方法模式。
    // 静态工厂方法模式
    // 将多个工厂方法模式里的方法置为静态的，不需要创建实例，直接调用即可。
//    public static void main(String[] args) {
//        //因为是静态方法，无需创建工厂类对象
//        Sender sender = SendFactory.produceMail();
//        sender.send();
//    }

    // 抽象工厂模式(拓展性较好)
    // 工厂方法模式有一个问题就是，类的创建依赖工厂类，也就是说，如果想要拓展程序，必须对工厂类进行修改，这违背了闭包原则
    public static void main(String[] args) {
        Provider provider = new SendMailFactory();
        Sender sender = provider.product();
        sender.send();
    }

}
